﻿using Abp;
using Mt.Site.Application.Authorization.Accounts.Dto;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace Mt.Site.Application.Authorization.Accounts
{
    public interface IAccountAppService : IBackEndAppService
    {
        List<NameValue<int>> GetAllAvailableTenants();


        Task<IsTenantAvailableOutput> IsTenantAvailable(IsTenantAvailableInput input);

        Task<int?> ResolveTenantId(ResolveTenantIdInput input);

        Task<RegisterOutput> Register(RegisterInput input);

        Task SendPasswordResetCode(SendPasswordResetCodeInput input);

        Task<ResetPasswordOutput> ResetPassword(ResetPasswordInput input);

        Task SendEmailActivationLink(SendEmailActivationLinkInput input);

        Task ActivateEmail(ActivateEmailInput input);

        Task<ImpersonateOutput> Impersonate(ImpersonateInput input);

        Task<ImpersonateOutput> DelegatedImpersonate(DelegatedImpersonateInput input);

        Task<ImpersonateOutput> BackToImpersonator();

        Task<SwitchToLinkedAccountOutput> SwitchToLinkedAccount(SwitchToLinkedAccountInput input);

        Task<SwitchCultureNameOutput> SwitchCultureName(SwitchCultureInput input);
    }
}
